package drg_group.suzhou_2023.MDC;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;

import drg_group.suzhou_2023.Base;
import drg_group.suzhou_2023.MedicalRecord;
import drg_group.suzhou_2023.ADRG.*;

public class MDCL{
    public static String group(MedicalRecord record){
        String[] mdc_zd={"N28.902","N32.811","E72.006+N29.8*","C65.x02","S37.001","N31.201","Q62.100x902","Q62.300x101","Q64.700x904","T83.003","C67.900","D30.900","N07.900x001","N13.801","Z46.603","N28.801","R82.300","N20.100","E11.200x027+N08.3*","D41.700","N32.202","N31.200x006","Q64.200x021","N05.000x001","E11.200x092+N08.3*","N34.000x005","R32.x00","N99.808","N20.901","N13.302","N00.900x008","E10.200x017+N08.3*","T83.800x001","T28.800x001","N04.801","N00.900","N28.001","S37.111","D30.200","Q60.501","N03.900x005","N32.806","Q60.500","N34.200x006","E85.411+N29.8*","N28.831","R82.800","T83.004","N28.824","Q64.200","N30.805","N34.100","Q63.200","R35.x00x001","R94.802","N31.200x007","E11.200x017+N08.3*","S37.303","R94.402","E10.200x016+N08.3*","T28.800","Q63.001","N00.600","N01.400x001","N99.100x005","N12.x01","T83.100x002","C48.001","E14.200x213+N08.3*","N02.102","N06.400","N21.100","C79.103","C79.100x002","M32.102+N16.4*","N39.401","S37.300x081","N04.900","R39.100x002","C67.500","D30.701","N28.900x010","N02.900","N03.502","N05.900","N13.400","N05.900x006","N32.810","N07.700","Q60.200","E13.201+N08.3*","E11.200x031+N29.8*","N13.506","Q64.400x301","N06.300","N10.x01","D17.700x016","N28.829","N34.300","N28.809","N05.000x003","N27.000","N11.801","N32.808","N28.837","R94.401","N03.900x003","N19.x00","E14.200x017+N08.3*","R94.803","S37.814","Q62.300x902","E14.200x016+N08.3*","E11.200x029+N08.3*","N00.900x006","N03.800x001","N32.800x008","T83.500x003","D41.401","R82.500x005","Q63.000","N30.800x004","N06.200","E14.200x011+N08.3*","C65.x01","Q63.800x101","R82.901","D09.100x001","R94.400","M31.305+N08.5*","N05.701","N28.810","N39.001","N18.900x011","N03.300x001","C79.000x001","N05.501","N18.501","R39.101","S37.000","D09.104","R82.000","N28.808","N14.201","N30.901","N03.900x006","N15.900x002","R82.500x007","T83.100","E11.200x024+N08.3*","N00.000","N05.900x007","N21.000","N02.701","N13.203","N34.101","N07.400","N28.832","N13.600x002","N13.600x001","E10.200x213+N08.3*","N14.400","T19.801","Q64.708","N20.000","Q51.701","N36.807","C64.x00x003","N32.201","N03.900x002","S37.200x011","N04.400x001","N99.001","T86.811","R93.402","N05.900x009","N05.900x003","N32.805","N20.900x001","S37.302","N01.200x001","N05.101","N13.501","N17.002","Q62.201","N05.801","N28.003","N31.901","Q62.700x101","N17.200","N28.812","R82.500x004","T86.100x003","N03.801","Q62.301","N25.805","N36.803","N36.002","S37.310","N28.820","R82.902","N15.901","Q64.301","E10.200x014+N08.3*","T83.000x001","N32.800x009","C66.x00","D41.901","N00.902","N28.900x013","N39.402","A40.901+N08.0*","T83.802","N19.x01","Q42.200x201","N04.901","N03.100","D21.506","N34.000","Q64.706","Q64.707","T19.900","Q63.102","N32.103","N06.800","D30.000","M31.100","R30.900x001","N36.805","E11.200x023+N08.3*","N36.901","Q64.304","N14.301","N04.902","S37.000x016","E10.200x212+N08.3*","N02.800x003","E14.200x015+N08.3*","N02.502","Q63.002","E14.200x215+N08.3*","N30.808","N32.002","N99.805","Q61.402","C90.004+N16.1*","N32.813","N06.500","N34.200x004","R34.x02","N28.804","N27.100","Q61.403","Q64.700x201","N02.802","Q64.700x901","M31.701+N08.5*","A02.205+N16.0*","N28.002","N04.903","Q64.000","Q62.100x802","T83.001","N36.000","N32.803","N30.809","C67.300","T81.800x014","E10.200x031+N29.8*","Q63.101","N18.901","N20.000x003","C76.301","N32.814","S37.004","E11.200x213+N08.3*","N30.902","R93.404","E10.200x091+N08.3*","R82.500x006","D30.100","N28.821","S37.201","N99.100x003","N05.900x002","D89.101+N08.2*","S37.200x022","N18.400","S37.300x005","N28.815","N13.600","N34.203","N36.300","N30.802","N11.800x003","Q60.100","N39.400","N01.900x001","N30.900","T86.106","N32.809","N32.812","R35.x00x003","N11.900x001","Q85.900x029","N18.902","R82.500x003","N04.800x002","N04.700","E14.200x211+N08.3*","N99.800x011","N26.x01","E10.200x092+N08.3*","N05.000x004","N10.x00","N28.827","E14.200x029+N08.3*","E14.200x028+N08.3*","N03.900x007","N28.805","N02.101","E10.200x211+N08.3*","T83.100x001","N03.601","N31.203","N28.806","N28.818","C68.805","N27.900","S37.010","Q63.301","E10.200x026+N08.3*","Z49.201","N00.400","N26.x00","N21.900","Q63.302","N99.800x006","T83.800","N00.301","N25.802","Q61.401","N28.817","N39.300","N36.100","N13.602","N36.000x007","N31.200x002","Q64.700x601","T83.500x002","N35.800","R39.801","Z45.800x007","R82.900x002","I12.900x008","N25.806","T86.103","N00.100x001","N18.500","N36.004","T19.800x001","D41.400x001","N36.806","N15.801","R30.100x001","E10.200x012+N08.3*","N25.804","E11.200x015+N08.3*","E14.200x021+N08.3*","N32.400","N21.001","Q62.101","E11.200x013+N08.3*","T86.105","N28.814","N04.502","N11.100","N13.604","N36.809","N04.101","N25.004","Q61.200","N14.102","N32.101","Q61.100","N25.001","C67.100","N04.001","N05.400","N28.819","N28.838","N01.900x002","D09.103","N03.500x003","R80.x00","Q87.808","D18.000x806","E10.201+N08.3*","E14.200x030+N08.3*","N15.900x003","N00.801","R30.000","N17.800","E14.200x026+N08.3*","N18.904","R93.400x003","E14.200x024+N08.3*","N13.504","C68.804","C95.900x017+N16.1*","E10.200x028+N08.3*","D41.000x001","E66.902+N08.4*","N25.803","T83.804","N34.102","Q63.801","T86.100x007","N07.600","N01.600x001","E11.200x211+N08.3*","S37.301","N01.900x003","Z46.800x001","N26.x02","Q62.300x901","N02.201","N05.201","N13.100x001","T83.002","S37.211","S37.000x022","N13.901","N03.000","C79.101","N32.203","M10.005+N22.8*","S37.000x023","I12.900x005","E14.200x025+N08.3*","Q63.103","S37.101","N15.000","N39.800","Q87.800x903","N28.835","N00.802","D41.100x001","S37.002","Z46.602","I12.000x001","M31.002+N08.5*","E11.400x380+G99.0*","R82.600x001","E11.200x030+N08.3*","N02.801","E11.200x025+N08.3*","D41.400x004","N30.400","C67.200","N17.900x003","Z46.601","E14.200x013+N08.3*","N30.804","N99.100","N02.001","N28.100","N28.900x026","S37.813","E10.200x027+N08.3*","N10.x02","Q62.400x001","N02.702","Q62.800","T83.801","Q64.703","S37.000x032","N35.901","T86.100x002","N99.101","Q61.300","R93.400x001","Q64.200x001","N05.301","Q61.901","N25.100","N34.204","S37.300x021","C68.801","N04.501","N12.x00","N31.200x001","Q64.100","N05.600","D41.900x001","R93.405","E72.007","N36.802","N30.801","N30.100","N30.810","T19.100","S37.200x024","Q64.302","N05.802","R82.700","Q62.700x001","N28.823","R93.403","T83.100x003","N06.100","N00.901","C95.900x007+N16.1*","C76.303","E11.200x028+N08.3*","M31.102+N08.5*","N11.900x003","N17.900","D41.300x001","C67.600","Q64.502","N30.806","N03.501","R30.100","N28.825","N00.700","N20.000x001","E85.002","R93.400x002","S37.300x031","E11.200x026+N08.3*","N02.203","N32.800x019","N28.900x004","Q62.300x903","Q62.200","N31.200x003","N32.800x012","Q62.103","N07.300","N13.503","R33.x00","T86.100x005","N32.901","Q60.400x001","D41.301","N13.600x004","N28.102","C68.802","M35.006+N16.4*","T86.104","N02.900x002","C79.102","N03.901","S37.200x023","N07.000","C67.900x002","Z49.000x004","N32.001","D41.001","N15.900x004","N19.x03","N31.800","N28.004","Q64.402","N32.804","S37.200","S37.300x004","E14.200x012+N08.3*","N34.002","S37.000x031","N03.400","M31.703+N08.5*","R34.x01","N06.001","M35.007+N16.4*","N15.102","Z49.101","N30.201","I12.904","N30.000","I12.900x009","N03.503","N07.200","T19.000","N28.830","Q62.100","N17.001","N32.204","N36.201","E14.200x212+N08.3*","C90.005+N08.1*","Q62.300x301","N32.800x014","Q64.303","E10.200x013+N08.3*","E14.400x381+N33.8*","N17.900x002","N18.200","N32.200","N07.100","N34.200x003","Q61.400","N15.101","N25.900","E11.201+N08.3*","D30.302","N30.803","Z52.400","N03.800x003","N28.803","E14.200x031+N29.8*","N13.500x010","N99.806","Q85.900x013","N35.000x001","N01.100x002","N18.100","E14.200x023+N08.3*","N28.834","C68.000","C66.x00x002","E11.200x012+N08.3*","N13.701","N28.811","N11.901","N14.101","T86.100x006","N32.815","Q64.704","N17.900x004","Q60.600","E10.200x023+N08.3*","N20.001","N34.001","S37.003","Z46.800x002","C68.800","M31.003+N08.5*","N28.813","N32.301","M10.001+N16.8*","N11.802","E85.403","Q60.300","T83.501","N32.807","N11.800x002","Z49.000","N17.100","D09.000","R82.200","D18.000x811","N36.001","N39.800x001","Q63.900","R31.x00","C79.001","Q61.800","E11.200x214+N08.3*","N28.900x017","N35.000","N32.000","Q64.800x001","N28.101","N28.816","E14.200x014+N08.3*","E11.200x212+N08.3*","Q61.000","N00.500","S37.000x013","N23.x00","E12.200","N13.300x005","E11.200x091+N08.3*","N01.300x001","C67.000","R80.x01","N01.900","M32.101+N08.5*","N04.300x001","Q61.900","Q63.203","E11.200x215+N08.3*","E11.200x011+N08.3*","R39.100x001","D30.301","N02.401","N39.403","N39.100","E10.200x024+N08.3*","N31.100x001","N28.822","D18.000x819","E11.400x381+N33.8*","N39.405","Q62.700x201","N32.100","N35.900","E11.200x014+N08.3*","R93.401","T28.300","N00.800x001","N99.500","Q62.300x904","N00.900x009","N00.200","C64.x00x001","Q64.400x902","D09.102","E13.200x521+N08.3*","S37.100","Q62.000","N28.826","I12.900x002","S37.000x012","N11.000x001","E14.200x092+N08.3*","N32.300","C66.x00x003","N17.901","N00.900x002","N31.000x001","N13.603","Q27.305","R39.000","N28.833","E14.200x091+N08.3*","N28.800x001","Q64.702","Q85.903","N34.205","C67.501","S37.300x011","Q62.300x905","N13.202","N13.605","N04.200x001","Q61.500","Q64.700x902","D30.300","T83.101","N21.800","Z46.600x001","N36.200","Q62.104","E10.200x015+N08.3*","R39.200","N02.900x001","N34.202","Q63.800x902","C67.800","C67.400","N02.302","Q62.600","I12.900x006","Q62.602","Q62.400x002","E10.200x214+N08.3*","R32.x01","N39.200","N30.300","N01.800","Q61.404","E10.200x215+N08.3*","C68.900","D30.400","Q64.403","A41.902+N08.0*","T86.102","C68.803","N39.900","E14.200x027+N08.3*","Q64.501","D41.200x001","N02.002","N03.900x004","N36.302","N36.005","Q60.400","R39.200x001","N28.901","N02.600","N04.300x003","D41.101","N99.803","Q62.400","N03.700","N17.200x003","N06.900","T83.500","N39.404","N32.801","S37.000x015","N13.204","T86.107","E10.200x029+N08.3*","E14.400x380+G99.0*","Q64.600","E10.200x011+N08.3*","N11.900","N32.102","N28.005","T79.500","S37.300","T86.100x001","N39.300x002","D41.201","N03.800x004","N07.500","N06.600","N13.502","N03.200x001","N17.101","N20.200x001","N20.900","T83.200","C65.x00","Z49.000x002","I86.201","Q62.500","R79.802","N04.102","N32.900x002","Q64.701","S37.300x083","N28.807","R35.x00","N12.x03","N17.200x002","N13.000","S37.200x081","E11.200x016+N08.3*","N06.700","R80.x02","I12.900x003","Q62.601","N28.839","R80.x00x003","T79.500x002","Q63.201","N18.300","N04.601","N32.802","N20.000x002","N36.003","T83.100x004","N01.500x001","Q64.100x091","Q64.705","N01.000","N01.700x001","N36.301","N31.202","N13.201","I13.100x001","R36.x01","N17.000","N35.100x001","N28.828","N20.002","C68.800x003","D09.101","Q61.801","T81.800x011","N28.802","C67.700","N34.201","N14.000","D69.005+N08.2*","N05.803","N32.800x003","N07.800","N13.301","E10.200x030+N08.3*","N36.808","T83.103","N02.301","S37.011","I12.900x001","E14.200x214+N08.3*","R82.900x003","N32.104","T83.102","N12.x02","N28.836","E10.200x025+N08.3*","Q62.700","Q64.900","E83.100x008+N16.3*","N39.000","B65.002+N22.0*","S37.300x082","N03.900","Q64.401","T86.100x008","C68.100","N19.x02","N36.804","Q60.000","Q64.700x801","N30.807","Q62.202","Q64.700x701","R30.000x002","N25.800x006","N99.000","C64.x00x004","N13.601"};
        String[] dept_list={};
        if (!(true && Base.contains(mdc_zd,record.zdList[0]))){
            return "";
        }
        
        Base.groupMessages.putMessage(record.Index,"符合MDCL入组条件，匹配规则：主诊断匹配");
        String result;

        result=LA1.group(record);
        if (result.length()>0){
            return result;
        }

        result=LA2.group(record);
        if (result.length()>0){
            return result;
        }

        result=LB1.group(record);
        if (result.length()>0){
            return result;
        }

        result=LB2.group(record);
        if (result.length()>0){
            return result;
        }

        result=LC1.group(record);
        if (result.length()>0){
            return result;
        }

        result=LD1.group(record);
        if (result.length()>0){
            return result;
        }

        result=LE1.group(record);
        if (result.length()>0){
            return result;
        }

        result=LF1.group(record);
        if (result.length()>0){
            return result;
        }

        result=LJ1.group(record);
        if (result.length()>0){
            return result;
        }

        result=LL1.group(record);
        if (result.length()>0){
            return result;
        }

        if (record.ssList!=null && record.ssList.length>0 && Base.contains(Base.SS_VALID,record.ssList[0])){
            Base.groupMessages.putMessage(record.Index,"符合LQY入组条件，存在有效手术操作："+String.join(",",Base.Intersect(record.ssList,Base.SS_VALID)));
            return "LQY";
        }

        result=LR1.group(record);
        if (result.length()>0){
            return result;
        }

        result=LS1.group(record);
        if (result.length()>0){
            return result;
        }

        result=LT1.group(record);
        if (result.length()>0){
            return result;
        }

        result=LU1.group(record);
        if (result.length()>0){
            return result;
        }

        result=LV1.group(record);
        if (result.length()>0){
            return result;
        }

        result=LW1.group(record);
        if (result.length()>0){
            return result;
        }

        result=LX1.group(record);
        if (result.length()>0){
            return result;
        }

        result=LZ1.group(record);
        if (result.length()>0){
            return result;
        }

        Base.groupMessages.putMessage(record.Index,"不符合MDCL的ADRG入组条件");
        return "";
    }
}

